using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;

namespace SharpMud.Net
{
    /// <summary>
    /// An ISessionStateStack represents a stack of ISessionState's as a singular ISessionState
    /// </summary>
    /// <remarks>
    /// The ISessionStateStack's ISessionState
    /// </remarks>
    public interface ISessionStateStack : IStack<ISessionState>, ISessionState
    {
        void Push(ISessionState sessionState, bool autoInitialize);
    }

    /// <summary>
    /// A generic-ized form of representing a stack of ISessionState's as a single ISessionState
    /// </summary>
    /// <remarks>
    /// It is recommended that you inherit directly from SessionStateStack, which implements ISessionStateStack
    /// </remarks>
    public interface ISessionStateStack<TSession> : ISessionStateStack, IStack<ISessionState<TSession>>, ISessionState<TSession> where TSession : IHasSessionState<TSession> 
    {
        void Push(ISessionState<TSession> sessionState, bool autoInitialize);
    }
}
